/**
 * electron/preload/lifecycle.js
 * 生命周期管理类，负责处理应用在不同阶段的生命周期事件
 * 包括应用启动、窗口加载、应用关闭前等关键节点的处理
 */

'use strict';

// 导入日志模块，用于记录生命周期事件的日志
const { logger } = require('ee-core/log');
// 导入配置模块，用于获取应用配置
const { getConfig } = require('ee-core/config');
// 导入获取主窗口的方法
const { getMainWindow } = require('ee-core/electron');

/**
 * 生命周期管理类
 * 处理应用从启动到关闭的各个生命周期事件
 */
class Lifecycle {

  /**
   * 核心应用加载完成时触发
   * 可以在这里执行一些初始化操作
   */
  async ready() {
    logger.info('[lifecycle] ready');
  }

  /**
   * Electron应用准备就绪时触发
   * 在electron.app的ready事件之后调用
   */
  async electronAppReady() {
    logger.info('[lifecycle] electron-app-ready');
    
    // 移除应用菜单栏
    const { Menu } = require('electron');
    Menu.setApplicationMenu(null);
  }

  /**
   * 主窗口加载完成时触发
   * 在这里可以处理窗口显示相关的逻辑
   */
  async windowReady() {
    logger.info('[lifecycle] window-ready');
    // 延迟加载窗口，避免白屏现象
    const { windowsOption } = getConfig();
    if (windowsOption.show == false) {
      const win = getMainWindow();
      win.once('ready-to-show', () => {
        // 窗口准备好显示时，显示窗口并聚焦
        win.show();
        win.focus();
      })
    }
  }

  /**
   * 应用关闭前触发
   * 可以在这里执行一些清理操作、保存状态等
   */  
  async beforeClose() {
    logger.info('[lifecycle] before-close');
  }
}
// 重写toString方法，便于调试和日志输出
Lifecycle.toString = () => '[class Lifecycle]';

// 导出Lifecycle类
module.exports = {
  Lifecycle
};